package com.kgc.basic.remote;

import com.kgc.basic.util.ResponseMsg;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

public interface ImportExportRemote {

    /**
     * 导入
     *
     * @param file            上传的 Excel 文件
     * @param entityClassName 实体类完整限定名类型（如 com.kgc.basic.pojo.Customer）
     * @param uniqueField     唯一字段名，用于校验唯一性（如 "code"）
     * @return ResponseMsg 包含操作结果
     */
    @RequestMapping(value = "/import", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseBody
    ResponseMsg importInfo(
            @RequestPart("file") MultipartFile file,
            @RequestParam("entityClassName") String entityClassName,
            @RequestParam("uniqueField") String uniqueField,
            @RequestParam("flag") String flag
    );

    /**
     * 下载 Excel 模板
     *
     * @param entityClassName 实体类完整限定名类型（如 com.kgc.basic.pojo.Customer）
     * @return ResponseMsg 包含模板的 Base64 编码数据
     */
    @RequestMapping(value = "/template", method = RequestMethod.GET)
    @ResponseBody
    ResponseMsg downLoadTemplate(
            @RequestParam("entityClassName") String entityClassName
    );

    /**
     * 导出数据到 Excel
     *
     * @param map             查询参数（包括分页参数）
     * @param entityClassName 实体类完整限定名类型（如 com.kgc.basic.pojo.Customer）
     * @param orderBy         排序字段（如 "create_date desc"）
     * @return ResponseMsg 包含导出的 Base64 编码数据
     */
    @RequestMapping(value = "/export", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    ResponseMsg exportEntities(
            @RequestBody Map<String, Object> map,
            @RequestParam("entityClassName") String entityClassName,
            @RequestParam("orderBy") String orderBy
    );

    /**
     * 打印pdf文件
     *
     * @param map             查询参数（包括分页参数）
     * @param entityClassName 实体类完整限定名类型（如 com.kgc.basic.pojo.Customer）
     * @param orderBy         排序字段（如 "create_date desc"）
     */
    @RequestMapping(value = "/print", method = RequestMethod.POST)
    ResponseMsg printEntitiesToPDF(@RequestBody Map<String, Object> map,
                                   @RequestParam("entityClassName") String entityClassName,
                                   @RequestParam("orderBy") String orderBy);

}
